package com.controlf.adf.practicafinal.model.entity;

import com.controlf.adf.practicafinal.model.domain.common.NumeroTelefono;

import java.util.Calendar;

import oracle.jbo.Key;
import oracle.jbo.RowIterator;
import oracle.jbo.domain.Date;
import oracle.jbo.domain.Number;
import oracle.jbo.server.AttributeDefImpl;
import oracle.jbo.server.EntityDefImpl;
import oracle.jbo.server.EntityImpl;
import oracle.jbo.server.SequenceImpl;
// ---------------------------------------------------------------------
// ---    File generated by Oracle ADF Business Components Design Time.
// ---    Wed Nov 05 02:02:16 ART 2014
// ---    Custom code may be added to this class.
// ---    Warning: Do not modify method signatures of generated methods.
// ---------------------------------------------------------------------
public class EmpleadosEOImpl extends EntityImpl {
    private static EntityDefImpl mDefinitionObject;

    /**
     * Validation method for FechaNacimiento.
     */
    public boolean validateFechaMayorEdad(Date fechanacimiento) {
        Calendar dob = Calendar.getInstance();        
        dob.setTime(convertDomainDateToUtilDate(fechanacimiento));        
        Calendar today = Calendar.getInstance();
        int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
        if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR))
        age--;
        if(age>=18)
            return true;
        else
            return false;
    }
    
    public static java.util.Date convertDomainDateToUtilDate(oracle.jbo.domain.Date domainDate) {
    java.util.Date date = null;
    if (domainDate != null) {
    java.sql.Date sqldate = domainDate.dateValue();
    date = new java.util.Date(sqldate.getTime());
    }
    return date;
    }

    /**
     * AttributesEnum: generated enum for identifying attributes and accessors. DO NOT MODIFY.
     */
    public enum AttributesEnum {
        IdEmpleado {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getIdEmpleado();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setIdEmpleado((Number)value);
            }
        }
        ,
        Nombres {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getNombres();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setNombres((String)value);
            }
        }
        ,
        Apellidos {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getApellidos();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setApellidos((String)value);
            }
        }
        ,
        NumeroDni {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getNumeroDni();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setNumeroDni((Number)value);
            }
        }
        ,
        FechaNacimiento {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getFechaNacimiento();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setFechaNacimiento((Date)value);
            }
        }
        ,
        TelefonoFijo {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getTelefonoFijo();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setTelefonoFijo((NumeroTelefono)value);
            }
        }
        ,
        TelefonoMovil {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getTelefonoMovil();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setTelefonoMovil((String)value);
            }
        }
        ,
        CorreoElectronico {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getCorreoElectronico();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setCorreoElectronico((String)value);
            }
        }
        ,
        Evaluaciones {
            public Object get(EmpleadosEOImpl obj) {
                return obj.getEvaluaciones();
            }

            public void put(EmpleadosEOImpl obj, Object value) {
                obj.setAttributeInternal(index(), value);
            }
        }
        ;
        private static AttributesEnum[] vals = null;
        private static final int firstIndex = 0;

        public abstract Object get(EmpleadosEOImpl object);

        public abstract void put(EmpleadosEOImpl object, Object value);

        public int index() {
            return AttributesEnum.firstIndex() + ordinal();
        }

        public static final int firstIndex() {
            return firstIndex;
        }

        public static int count() {
            return AttributesEnum.firstIndex() + AttributesEnum.staticValues().length;
        }

        public static final AttributesEnum[] staticValues() {
            if (vals == null) {
                vals = AttributesEnum.values();
            }
            return vals;
        }
    }


    public static final int IDEMPLEADO = AttributesEnum.IdEmpleado.index();
    public static final int NOMBRES = AttributesEnum.Nombres.index();
    public static final int APELLIDOS = AttributesEnum.Apellidos.index();
    public static final int NUMERODNI = AttributesEnum.NumeroDni.index();
    public static final int FECHANACIMIENTO = AttributesEnum.FechaNacimiento.index();
    public static final int TELEFONOFIJO = AttributesEnum.TelefonoFijo.index();
    public static final int TELEFONOMOVIL = AttributesEnum.TelefonoMovil.index();
    public static final int CORREOELECTRONICO = AttributesEnum.CorreoElectronico.index();
    public static final int EVALUACIONES = AttributesEnum.Evaluaciones.index();

    /**
     * This is the default constructor (do not remove).
     */
    public EmpleadosEOImpl() {
    }


    /**
     * @return the definition object for this instance class.
     */
    public static synchronized EntityDefImpl getDefinitionObject() {
        if (mDefinitionObject == null) {
            mDefinitionObject = EntityDefImpl.findDefObject("com.controlf.adf.practicafinal.model.entity.EmpleadosEO");
        }
        return mDefinitionObject;
    }

    /**
     * Gets the attribute value for IdEmpleado, using the alias name IdEmpleado.
     * @return the IdEmpleado
     */
    public Number getIdEmpleado() {
        return (Number)getAttributeInternal(IDEMPLEADO);
    }

    /**
     * Sets <code>value</code> as the attribute value for IdEmpleado.
     * @param value value to set the IdEmpleado
     */
    public void setIdEmpleado(Number value) {
        setAttributeInternal(IDEMPLEADO, value);
    }

    /**
     * Gets the attribute value for Nombres, using the alias name Nombres.
     * @return the Nombres
     */
    public String getNombres() {
        return (String)getAttributeInternal(NOMBRES);
    }

    /**
     * Sets <code>value</code> as the attribute value for Nombres.
     * @param value value to set the Nombres
     */
    public void setNombres(String value) {
        setAttributeInternal(NOMBRES, value);
    }

    /**
     * Gets the attribute value for Apellidos, using the alias name Apellidos.
     * @return the Apellidos
     */
    public String getApellidos() {
        return (String)getAttributeInternal(APELLIDOS);
    }

    /**
     * Sets <code>value</code> as the attribute value for Apellidos.
     * @param value value to set the Apellidos
     */
    public void setApellidos(String value) {
        setAttributeInternal(APELLIDOS, value);
    }

    /**
     * Gets the attribute value for NumeroDni, using the alias name NumeroDni.
     * @return the NumeroDni
     */
    public Number getNumeroDni() {
        return (Number)getAttributeInternal(NUMERODNI);
    }

    /**
     * Sets <code>value</code> as the attribute value for NumeroDni.
     * @param value value to set the NumeroDni
     */
    public void setNumeroDni(Number value) {
        setAttributeInternal(NUMERODNI, value);
    }

    /**
     * Gets the attribute value for FechaNacimiento, using the alias name FechaNacimiento.
     * @return the FechaNacimiento
     */
    public Date getFechaNacimiento() {
        return (Date)getAttributeInternal(FECHANACIMIENTO);
    }

    /**
     * Sets <code>value</code> as the attribute value for FechaNacimiento.
     * @param value value to set the FechaNacimiento
     */
    public void setFechaNacimiento(Date value) {
        setAttributeInternal(FECHANACIMIENTO, value);
    }

    /**
     * Gets the attribute value for TelefonoFijo, using the alias name TelefonoFijo.
     * @return the TelefonoFijo
     */
    public NumeroTelefono getTelefonoFijo() {
        return (NumeroTelefono)getAttributeInternal(TELEFONOFIJO);
    }

    /**
     * Sets <code>value</code> as the attribute value for TelefonoFijo.
     * @param value value to set the TelefonoFijo
     */
    public void setTelefonoFijo(NumeroTelefono value) {
        setAttributeInternal(TELEFONOFIJO, value);
    }

    /**
     * Gets the attribute value for TelefonoMovil, using the alias name TelefonoMovil.
     * @return the TelefonoMovil
     */
    public String getTelefonoMovil() {
        return (String)getAttributeInternal(TELEFONOMOVIL);
    }

    /**
     * Sets <code>value</code> as the attribute value for TelefonoMovil.
     * @param value value to set the TelefonoMovil
     */
    public void setTelefonoMovil(String value) {
        setAttributeInternal(TELEFONOMOVIL, value);
    }

    /**
     * Gets the attribute value for CorreoElectronico, using the alias name CorreoElectronico.
     * @return the CorreoElectronico
     */
    public String getCorreoElectronico() {
        return (String)getAttributeInternal(CORREOELECTRONICO);
    }

    /**
     * Sets <code>value</code> as the attribute value for CorreoElectronico.
     * @param value value to set the CorreoElectronico
     */
    public void setCorreoElectronico(String value) {
        setAttributeInternal(CORREOELECTRONICO, value);
    }

    /**
     * getAttrInvokeAccessor: generated method. Do not modify.
     * @param index the index identifying the attribute
     * @param attrDef the attribute

     * @return the attribute value
     * @throws Exception
     */
    protected Object getAttrInvokeAccessor(int index,
                                           AttributeDefImpl attrDef) throws Exception {
        if ((index >= AttributesEnum.firstIndex()) && (index < AttributesEnum.count())) {
            return AttributesEnum.staticValues()[index - AttributesEnum.firstIndex()].get(this);
        }
        return super.getAttrInvokeAccessor(index, attrDef);
    }

    /**
     * setAttrInvokeAccessor: generated method. Do not modify.
     * @param index the index identifying the attribute
     * @param value the value to assign to the attribute
     * @param attrDef the attribute

     * @throws Exception
     */
    protected void setAttrInvokeAccessor(int index, Object value,
                                         AttributeDefImpl attrDef) throws Exception {
        if ((index >= AttributesEnum.firstIndex()) && (index < AttributesEnum.count())) {
            AttributesEnum.staticValues()[index - AttributesEnum.firstIndex()].put(this, value);
            return;
        }
        super.setAttrInvokeAccessor(index, value, attrDef);
    }

    /**
     * @return the associated entity oracle.jbo.RowIterator.
     */
    public RowIterator getEvaluaciones() {
        return (RowIterator)getAttributeInternal(EVALUACIONES);
    }


    /**
     * @param idEmpleado key constituent

     * @return a Key object based on given key constituents.
     */
    public static Key createPrimaryKey(Number idEmpleado) {
        return new Key(new Object[]{idEmpleado});
    }

    @Override
    protected void initDefaults() {
        super.initDefaults();
        SequenceImpl seq = new SequenceImpl("EMPLEADOS_SEQ", getDBTransaction());
        populateAttributeAsChanged(IDEMPLEADO, seq.getSequenceNumber());

    }
}
